package com.swordget.dao;

import com.swordget.entity.ColumnDesign;

import java.util.List;

/**
 * @Author: David
 * @Date: Created in 15:34 2020/4/4
 * @Description: 表结构服务Dao层接口
 * 系统默认使用数据库实现，如果系统管理的表过多，
 * 系统性能到达瓶颈，可以将这块实现换缓存实现，实现接口即可
 * @Modified By:
 * @Version: 0.0.1
 */
public interface TableDefinitionDao {

    /**
     * 表定义是否存在，是否是系统新建的表
     * @param tableName 表名
     * @param tableId 表id
     * @return
     */
    boolean isExists(String tableName, String tableId);

    /**
     * 表的定义是否存在，是否是系统新建的表
     * @param tableId
     * @return 存在 true 否 false
     */
    String isExists(String tableId);


    /**
     * 清理表定义数据
     * @param tableName 表名
     * @param tableId 表id
     * @return
     */
    boolean clearData(String tableName, String tableId);

    /**
     * 查询表结构
     * @param tableId 表标识
     * @param withHidden 是否包含隐藏列
     * @param withBusiness
     * @return
     */
    List<String> getColumns(String tableId, boolean withHidden, boolean withBusiness);

    /**
     * 获取表结构类型
     * @param tableId 表标识
     * @param withHidden 是否包含隐藏列
     * @param withBusiness
     * @return
     */
    List<String> getTypes(String tableId, boolean withHidden, boolean withBusiness);


    /**
     * 获取表结构注释
     * @param tableId 表标识
     * @param withHidden 是否包含隐藏列
     * @param withBusiness
     * @return
     */
    List<String> getCommons(String tableId, boolean withHidden, boolean withBusiness);

    /**
     * 获取指定表的所有列结构信息
     * @param tableId 表标识
     * @param withHidden 是否为隐藏列
     * @param withBusiness
     * @return
     */
    List<ColumnDesign> getColumnDesigns(String tableId, boolean withHidden, boolean withBusiness);

    /**
     * 获取校验文件位置
     * @param tableId 表标识
     * @return
     */
    String getCheckFilePath(String tableId);

    /**
     * 获取表中文名
     * @param tableId
     * @return
     */
    String getTableComment(String tableId);
}
